package pickbook.model;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

//회원 DB 접근 관련 Database Access Object implements 후 정의
@Repository
public class MemberDAOImpl implements MemberDAO{
	
	@Resource(name="sqlSessionTemplate")
	private SqlSessionTemplate sqlSessionTemplate;
	
	/**
	 * method : findById
	 * comment : 매개변수 회원 아이디를 통해 회원 정보를 반환하는 메서드
	 * @param id
	 * @return
	 * 
	 * @author 김병각, 제형규
	 * @date 2014-07-08
	 */
	@Override
	public MemberVO findById(String id) {
		return sqlSessionTemplate.selectOne("member.findById",id);
	}
	/**
	 * method : idCheck
	 * comment : 회원가입 시 아이디 중복 체크 메서드
	 * @param id
	 * @return
	 * 
	 * @author 김병각
	 * @date 2014-07-02
	 */
	@Override
	public int idCheck(String id) {
		return sqlSessionTemplate.selectOne("member.idCheck",id);
	}
	/**
	 * method : register
	 * comment : 입력된 회원 정보를 회원 DB에 저장하여 가입하는 메서드
	 * 
	 * @param mvo
	 * 
	 * @author 김병각
	 * @date 2014-07-02
	 */
	@Override
	public void register(MemberVO mvo) {
		sqlSessionTemplate.insert("member.register",mvo);
	}
	/**
	 * method : update
	 * comment : 입력된 회원 정보로 회원 DB 내용 변경하는 메서드
	 * @param mvo
	 * 
	 * @author 김병각
	 * @date 2014-07-03
	 */
	@Override
	public void update(MemberVO mvo) {
		sqlSessionTemplate.update("member.update",mvo);
	}
	
	/**
	 * method : withdraw
	 * comment : 회원 DB에서 id에 해당하는 회원 정보를 삭제하여 탈퇴하는 메서드
	 * @param id
	 * 
	 * @author 김병각
	 * @date 2014-07-02
	 */
	@Override
	public void withdraw(String id) {
		sqlSessionTemplate.delete("member.withdraw",id);
	}
	/**
	 * method : loginMember
	 * comment : 회원 아이디와 비밀번호를 통해 로그인하는 메서드
	 * 
	 * @param mvo
	 * @return
	 * 
	 * @author 김병각
	 * @date 2014-07-02
	 */
	@Override
	public MemberVO loginMember(MemberVO mvo) {		
		return sqlSessionTemplate.selectOne("member.login",mvo);
	}
	
	/**
	 * method : memberList
	 * comment : pageNo를 통해 회원 리스트를 받아오는 메서드
	 * 
	 * @param pageNo
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04 
	 */
	@Override
	public List<MemberVO> memberList(String pageNo) {
		return sqlSessionTemplate.selectList("member.memberList",pageNo);
	}
	
	/**
	 * method : totalContent()
	 * comment : 회원수를 리턴하는 메서드
	 * 
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04
	 */
	@Override
	public int totalContent() {
		return sqlSessionTemplate.selectOne("member.totalContent");
	}
	
	/**
	 * method : searchMember
	 * comment : 회원 검색 메서드
	 * 
	 * @param factor
	 * @param pageNo
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04 
	 */
	@Override
	public List searchMember(String factor, String pageNo){
		
		Map map=new HashMap();
		map.put("factor", factor);//검색어
		map.put("pageNo", pageNo);//페이지번호
		
		return sqlSessionTemplate.selectList("member.searhMemberList",map);
	}
	/**
	 * method : totalSearchContent()
	 * comment : 검색된 회원 수를 리턴하는 메서드
	 * 
	 * @param factor
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04
	 */
	public int totalSearchContent(String factor){
		return sqlSessionTemplate.selectOne("member.totalSearchContent", factor);
	}
	/**
	 * method : sendMsg
	 * comment : 픽하기를 통해 판매/구매자에게 메시지 전송하는 메서드
	 * 
	 * @param msgvo
	 * 
	 * @author 김병각,제형규,이형철
	 * @date 2014-07-09
	 */
	@Override
	public void sendMsg(MsgVO msgvo) {
		sqlSessionTemplate.insert("member.sendMsg",msgvo);
	}
	
	/**
	 * method : getPickMsgListById
	 * comment : pick 메시지 리스트를 반환하는 메서드
	 * 
	 * @param id
	 * @param pageNo
	 * @return
	 * 
	 * @author 김병각,제형규,이형철
	 * @date 2014-07-09
	 */
	public List<MsgVO> getPickMsgListById(String id,String pageNo){
		
		HashMap map = new HashMap();
		
		map.put("id", id);//회원 아이디
		map.put("pageNo", pageNo);//페이지번호
		
		return sqlSessionTemplate.selectList("member.getPickMsgListById",map);
		
	}
	
	/**
	 * method : getTotalPickMsgList
	 * comment : pick  메시지 리스트의 총 갯수를 반환하는 메서드
	 * 
	 * @param id
	 * @return
	 * 
	 * @author 김병각,제형규,이형철
	 * @date 2014-07-09
	 */
	@Override
	public int getTotalPickMsgList(String id) {
		return sqlSessionTemplate.selectOne("member.getTotalPickMsgList",id);
	}
	
	/**
	 * method : deletePickMsg
	 * comment : 메시지 삭제를 수행하는 메서드
	 * 
	 * @param no
	 * 
	 * @author 김병각,제형규,이형철
	 * @date 2014-07-10
	 */
	@Override
	public void deletePickMsg(int no) {
		sqlSessionTemplate.delete("member.deletePickMsg",no);
	}
	
	/**
	 * method : updateMsgTotal
	 * comment : 메시지 총 갯수를 수정하는 메서드
	 * 
	 * @param id
	 * @param msgTotal
	 * 
	 * @author 김병각,제형규,이형철
	 * @date 2014-07-10
	 */
	@Override
	public void updateMsgTotal(String id, int msgTotal) {
		
		HashMap map=new HashMap();
		
		map.put("id", id);//회원아이디
		map.put("msgTotal", msgTotal);//메시지 총 갯수
		
		sqlSessionTemplate.update("member.updateMsgTotal", map);
		
	}
	
	/**
	 * method : deleteAllMsg
	 * comment : 회원아이디에 해당하는 모든 Pick 메시지 삭제하는 메서드
	 * 
	 * @param id
	 * 
	 * @author 김병각,제형규, 이형철
	 * @date 2014-07-11
	 */
	public void deleteAllPickMsg(String id){
		sqlSessionTemplate.delete("member.deleteAllPickMsg",id);
	}
}
